//package org.example.datasource.impl;
//
//import org.example.JdbcUrlParser;
//import org.example.datasource.DataSourceApi;
//import org.example.datasource.model.FieldMetadata;
//import org.example.datasource.model.JdbcDataSourceInfo;
//import org.example.datasource.model.TableMetadata;
//import org.example.model.JdbcInfo;
//
//import java.sql.*;
//import java.util.ArrayList;
//import java.util.List;
//
//public class JdbcDataSourceImpl  implements DataSourceApi {
//    JdbcDataSourceInfo jdbcDataSourceInfo;
//    Connection connection;
//
//    private  List<TableMetadata> tableMetadataListCache;
//
//    public JdbcDataSourceImpl(JdbcDataSourceInfo jdbcDataSourceInfo) {
//        this.jdbcDataSourceInfo = jdbcDataSourceInfo;
//
//
//    }
//
//    private Connection getConnection()  {
//        try {
//            if (connection != null && !connection.isClosed()){
//                return connection;
//            }
//        } catch (SQLException e) {
//            throw new RuntimeException(e);
//        }
//        try {
//            connection = DriverManager.getConnection(
//                    jdbcDataSourceInfo.getUrl(),
//                    jdbcDataSourceInfo.getUsername(),
//                    jdbcDataSourceInfo.getPassword());
//        } catch (SQLException e) {
//            throw new RuntimeException(e);
//        }
//        return connection;
//    }
//
//    @Override
//    public List<TableMetadata> getTableMetadata( List<String> tabless ) {
//        if (tableMetadataListCache !=null){
//            return tableMetadataListCache;
//        }
//        List<TableMetadata> tableMetadataList = new ArrayList<>();
//
//
//        DatabaseMetaData metaData = null;
//        try {
//            metaData = getConnection().getMetaData();
//            JdbcInfo jdbcInfo =  JdbcUrlParser.parseJdbcUrl(jdbcDataSourceInfo.getUrl());
//            for (String tb : tabless) {
//                // 获取所有表的元数据
//                ResultSet tables = null;
//                if (!jdbcInfo.getType().equals("oracle")){
//                    tables = metaData.getTables(jdbcInfo.getDatabase(), null, tb, new String[]{"TABLE","VIEW"});
//                }else {
//                    tables = metaData.getTables("%", null, tb, new String[]{"TABLE"});
//                }
//                while (tables.next()) {
//                    TableMetadata tableMetadata = new TableMetadata();
//
//                    String tableName = tables.getString("TABLE_NAME");
//                    tableMetadata.setTableName(tableName);
////                    tableMetadata.setDatabaseName(tables.getString("DATABASE_NAME"));
//                    // 获取表的字段元数据
//                    ResultSet columns = metaData.getColumns(null, null, tableName, "%");
//                    List<FieldMetadata> fieldMetadatas = new ArrayList<>();
//                    while (columns.next()) {
//                        String columnName = columns.getString("COLUMN_NAME");
//                        String columnType = columns.getString("TYPE_NAME");
//                        int columnSize = columns.getInt("COLUMN_SIZE");
//                        FieldMetadata fieldMetadata1 = new FieldMetadata();
//                        fieldMetadata1.setFileName(columnName);
//                        fieldMetadata1.setType(columnType);
//
//                        fieldMetadatas.add(fieldMetadata1);
//                    }
//                    tableMetadata.setDatabaseName(jdbcInfo.getDatabase());
//                    tableMetadata.setIp(jdbcInfo.getIp());
//                    tableMetadata.setPort(jdbcInfo.getPort());
//                    tableMetadata.setFields(fieldMetadatas);
//                    tableMetadataList.add(tableMetadata);
//                    columns.close();
//                }
//                tables.close();
//            }
//
//        } catch (SQLException e) {
//            throw new RuntimeException(e);
//        }
//        tableMetadataListCache = tableMetadataList;
//        return tableMetadataList;
//    }
//
//    @Override
//    public List<TableMetadata> getTableMetadata(String sql, boolean isSink) {
//        return List.of();
//    }
//}
